﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Capa_Dominio;
using Capa_Negocio.Gestionar_Reservacion;
using Capa_Negocio.Gestionar_SalaEnsayo;

namespace Studio7i.Controllers.Gestionar_Reservacion
{
    public class ClienteController : Controller
    {
        //
        #region Dependencias que se inyectan con Spring.NET
        IAdministrarReservacion AdminServiceReservacion = null;
        IAdministracionSalaEnsayo AdminServiceDistrito = null;
        #endregion 
        // GET: /Cliente/

        public ActionResult Index()
        {
            ICollection<Cliente> modelo = AdminServiceReservacion.ListarClientes();
            TempData["distritos"] = ListadoDistrito();
            TempData["tipoDocumento"] = ListarTipoDocumento();
            return View(modelo);
        }

        private ICollection<SelectListItem> ListarTipoDocumento()
        {
            ICollection<SelectListItem> tipoDocumento = new List<SelectListItem>();
            tipoDocumento.Add(new SelectListItem() { Value = string.Empty, Text = "Seleccione.." });
            foreach (TipoDocumento dis in AdminServiceReservacion.ListarTipoDocumento())
                tipoDocumento.Add(new SelectListItem()
                {
                    Value = dis.CodigoDocumento.ToString(),
                    Text = dis.NombreDocumento
                });
            return tipoDocumento;
        }

        private ICollection<SelectListItem> ListadoDistrito()
        {
            ICollection<SelectListItem> distritos = new List<SelectListItem>();
            distritos.Add(new SelectListItem() { Value = string.Empty, Text = "Seleccione.." });
            foreach (Distrito dis in AdminServiceDistrito.listarDistritos())
                distritos.Add(new SelectListItem()
                {
                    Value = dis.CodigoDistrito.ToString(),
                    Text = dis.NombreDistrito
                });
            return distritos;
        }
        //
        // GET: /Cliente/Details/5

        public ActionResult Details(int id)
        {
            return View();
        }

        //
        // GET: /Cliente/Create

        public ActionResult Create()
        {
            TempData["distritos"] = ListadoDistrito();
            TempData["tipoDocumento"] = ListarTipoDocumento();
            return View();
        } 

        //
        // POST: /Cliente/Create

        [HttpPost]
        public ActionResult Create(FormCollection formulario)
        {
            try
            {
                // TODO: Add insert logic here
                int codigoDistrito = int.Parse(formulario["codDistrito"]);
                string apellidos = formulario["Apellidos"];
                string nombres = formulario["Nombres"];
                int codtipoDocumento = int.Parse(formulario["codTipoDocumento"]);
                string numeroDocumento = formulario["NumeroDocumento"];
                string email = formulario["Email"];
                DateTime fechaNacimiento  = Convert.ToDateTime(formulario["FechaNacimiento"]);
                string claveAcceso = formulario["ClaveAcceso"];
                int codDistrito = int.Parse(formulario["codDistrito"]);
                string direccion = formulario["Direccion"];
                Cliente clienteCreado = AdminServiceReservacion.InscribirCliente(apellidos, nombres,
                    codtipoDocumento, numeroDocumento, email, fechaNacimiento, claveAcceso, claveAcceso, direccion, codigoDistrito, true);
                TempData["mensaje"] = "Cliente " + clienteCreado.CodigoCliente + " creado exitosamente";
                return RedirectToAction("Index");
            }
            catch (Exception ex)
            {
                ModelState.AddModelError(string.Empty, ex.Message); // Agregamos el error a mostrarse
                return View("Create"); // Problemas! De nuevo a Creacion.aspx
            }
        }
        
        //
        // GET: /Cliente/Edit/5
 
        public ActionResult Edit(int id)
        {
            return View();
        }

        //
        // POST: /Cliente/Edit/5

        [HttpPost]
        public ActionResult Edit(int id, FormCollection collection)
        {
            try
            {
                // TODO: Add update logic here
 
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }

        //
        // GET: /Cliente/Delete/5
 
        public ActionResult Delete(int id)
        {
            return View();
        }

        //
        // POST: /Cliente/Delete/5

        [HttpPost]
        public ActionResult Delete(int id, FormCollection collection)
        {
            try
            {
                // TODO: Add delete logic here
 
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }
    }
}
